package org.javaUtil.tool.Propertie;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 对象反射工具
 * 
 * @author muyi808
 * 
 */
public class RefBean {

	/**
	 * 校验类中是否存在某个字段
	 * 
	 * @param cz
	 *            要反射的对象类
	 * @param name
	 *            检查的对象名称
	 * @return boolean
	 */
	public boolean validationFiled(Class<?> cz, String name) {
		if (name != null && cz != null && !name.equals("")) {
			Field[] filed = cz.getDeclaredFields();

			for (Field f : filed) {
				if (f.getName().equals(name)) {
					return true;
				}
			}
		}

		return false;
	}

	/**
	 * 的到某个字段的类型
	 * 
	 * @param cz
	 *            要反射的对象类
	 * @param name
	 *            检查的对象名称
	 * @return Type
	 */
	public Type getType(Class<?> cz, String name) {

		if (name != null && cz != null && !name.equals("")) {
			Field[] filed = cz.getDeclaredFields();

			for (Field f : filed) {
				if (f.getName().equals(name)) {
					return f.getType();
				}
			}
		}

		return null;
	}

	/**
	 * 得到某个类所有的方法及返回类型
	 * 
	 * @param cz
	 *            反射对象
	 * @return List
	 */

	public List<String> getMethods(Class<?> cz) {
		List<String> list = new ArrayList<String>();

		if (cz != null) {
			Method[] meths = cz.getDeclaredMethods();

			for (Method m : meths) {
				list.add(m.getName());
			}

		}

		return list;
	}

	/**
	 * 校验某个是否有这个方法
	 * @param cz 反射对象
	 * @param  name 方法名称
	 * @return boolean
	 */

	public boolean  validationMethd(Class<?> cz, String name)
	{
		
		if (cz != null) {
			Method[] meths = cz.getDeclaredMethods();

			for (Method m : meths) {
				if(m.getName().equals(name))
				{
					
					return true;
				}
			}

		}
		
		return false;
	}
	
	
	
	
	
	/**
	 * 得到类的所有字段
	 * 
	 * @param cz
	 *            反射对象
	 */
	public List<String> getFileds(Class<?> cz) {
		List<String> list = new ArrayList<String>();

		if (cz != null) {
			Field[] f = cz.getDeclaredFields();

			for (Field field : f) {
				list.add(field.getName());
			}

		}

		return list;
	}

	/**
	 * 得到某个方法返回的类型
	 */

	
	public Type getMethodType(Class<?> cz,String name)
	{
		
		if(cz!=null&&cz!=null&&!cz.equals(""))
		
		{
			
			Method[] meths = cz.getDeclaredMethods();

			for (Method m : meths) {
				if(m.getName().equals(name))
				{
					
					return m.getReturnType();
				}
			}
			
		}
		return null;
	}
}
